package cn.csc.module.distribute.dal.mysql.audit;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.framework.mybatis.core.mapper.BaseMapperX;
import cn.csc.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.csc.framework.mybatis.core.query.LambdaUpdateWrapperX;
import cn.csc.module.distribute.controller.admin.audit.vo.DistributorAuditExportReqVO;
import cn.csc.module.distribute.controller.admin.audit.vo.DistributorAuditPageReqVO;
import cn.csc.module.distribute.dal.dataobject.audit.DistributorAuditDO;
import org.apache.ibatis.annotations.Mapper;

import java.math.BigInteger;
import java.util.List;

/**
 * 分销员审核记录 Mapper
 *
 * @author liuchuang
 */
@Mapper
public interface DistributorAuditMapper extends BaseMapperX<DistributorAuditDO> {

    default PageResult<DistributorAuditDO> selectPage(DistributorAuditPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<DistributorAuditDO>()
                .eqIfPresent(DistributorAuditDO::getUserId, reqVO.getUserId())
                .eqIfPresent(DistributorAuditDO::getDistributorId, reqVO.getDistributorId())
                .likeIfPresent(DistributorAuditDO::getDistributorName, reqVO.getDistributorName())
                .eqIfPresent(DistributorAuditDO::getAuditorId, reqVO.getAuditorId())
                .likeIfPresent(DistributorAuditDO::getAuditorName, reqVO.getAuditorName())
                .eqIfPresent(DistributorAuditDO::getAuditStatus, reqVO.getAuditStatus())
                .eqIfPresent(DistributorAuditDO::getAuditComment, reqVO.getAuditComment())
                .eqIfPresent(DistributorAuditDO::getHasRead, reqVO.getHasRead())
                .betweenIfPresent(DistributorAuditDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(DistributorAuditDO::getId));
    }

    default List<DistributorAuditDO> selectList(DistributorAuditExportReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<DistributorAuditDO>()
                .eqIfPresent(DistributorAuditDO::getUserId, reqVO.getUserId())
                .eqIfPresent(DistributorAuditDO::getDistributorId, reqVO.getDistributorId())
                .likeIfPresent(DistributorAuditDO::getDistributorName, reqVO.getDistributorName())
                .eqIfPresent(DistributorAuditDO::getAuditorId, reqVO.getAuditorId())
                .likeIfPresent(DistributorAuditDO::getAuditorName, reqVO.getAuditorName())
                .eqIfPresent(DistributorAuditDO::getAuditStatus, reqVO.getAuditStatus())
                .eqIfPresent(DistributorAuditDO::getAuditComment, reqVO.getAuditComment())
                .eqIfPresent(DistributorAuditDO::getHasRead, reqVO.getHasRead())
                .betweenIfPresent(DistributorAuditDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(DistributorAuditDO::getId));
    }


    default List<DistributorAuditDO> selectByUserId(BigInteger userId) {
        return selectList(new LambdaQueryWrapperX<DistributorAuditDO>()
                .eqIfPresent(DistributorAuditDO::getUserId, userId)
                .orderByDesc(DistributorAuditDO::getCreateTime));
    }


    default long selectCountByUserId(BigInteger userId, Boolean hasRead){
        return selectCount(new LambdaQueryWrapperX<DistributorAuditDO>()
                .eq(DistributorAuditDO::getUserId, userId)
                .eq(DistributorAuditDO::getHasRead, hasRead)
        );
    }

    default DistributorAuditDO selectCommentByUserId(BigInteger userId){
        return selectOne(new LambdaQueryWrapperX<DistributorAuditDO>()
                .select(DistributorAuditDO::getAuditComment)
                .eq(DistributorAuditDO::getUserId, userId)
                .orderByDesc(DistributorAuditDO::getCreateTime)
                .last("limit 1")
        );
    }


    default long updateByUserId(BigInteger userId){
        LambdaUpdateWrapperX<DistributorAuditDO> userUpdateWrapper = new LambdaUpdateWrapperX<>();
        userUpdateWrapper.set(DistributorAuditDO::getHasRead, true);
        userUpdateWrapper.eq(DistributorAuditDO::getUserId, userId);
        return update(null, userUpdateWrapper);
    }




}
